
package com.siashan.unipay4j.core.transfer;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.math.BigDecimal;
import java.util.List;

/**
 * 发起商家转账
 *
 * @author siashan
 * @date 2024-06-22
 */
@Getter
@Setter
@NoArgsConstructor
public class TransferRequestModel {

    /**
     * appid
     * <p>
     * 必填
     *
     * @apiNote 由微信生成的应用ID，全局唯一。请求基础下单接口时请注意APPID的应用属性，例如公众号场景下，
     * 需使用应用属性为公众号的服务号APPID
     */
    private String appid;
    /**
     * 商家批次单号
     * <p>
     * 必填
     * <p>
     * 商户系统内部的商家批次单号，要求此参数只能由数字、大小写字母组成，在商户系统内部唯一
     */
    private String outBatchNo;

    /**
     * 批次名称
     * <p>
     * 必填
     * <p>
     * 该笔批量转账的名称
     */
    private String batchName;
    /**
     * 批次备注
     * <p>
     * 必填
     * <p>
     * 转账说明，UTF8编码，最多允许32个字符
     */
    private String batchRemark;
    /**
     * 转账总金额
     * <p>
     * 必填
     * <p>
     * 转账金额单位为“元”。转账总金额必须与批次内所有明细转账金额之和保持一致，否则无法发起转账操作
     */
    private BigDecimal totalAmount;
    /**
     * 转账总笔数
     * <p>
     * 必填
     * <p>
     * 一个转账批次单最多发起一千笔转账。转账总笔数必须与批次内所有明细之和保持一致，否则无法发起转账操作
     */
    private int totalNum;

    /**
     * 转账明细列表
     * <p>
     * 必填
     * <p>
     * 发起批量转账的明细列表，最多一千笔
     */
    private List<TransferDetail> transferDetailList;


    /**
     * 转账场景ID
     * <p>
     * 选填
     * <p>
     * 该批次转账使用的转账场景，如不填写则使用商家的默认场景，如无默认场景可为空，可前往“商家转账到零钱-前往功能”中申请。
     * 如：1001-现金营销
     */
    private String transferSceneId;

    /**
     * 通知地址
     *
     * @apiNote 异步接收微信支付结果通知的回调地址，通知url必须为外网可访问的url，不能携带参数。
     * 公网域名必须为https，如果是走专线接入，使用专线NAT IP或者私有回调域名可使用http
     */
    private String notifyUrl;
}
